﻿// 线程池项目最终版重构版.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include<functional>
#include<thread>
#include<future>
#include<chrono>
#include"threadpool.h"
using namespace std;

int sum1(int a, int b)
{
    this_thread::sleep_for(chrono::seconds(2));
    return a + b;

}
int sum2(int a, int b,int c)
{
    return a + b+c;

}


//1.如果能让线程池提交任务更加方便:submittask应该采用可变参模版编程
// pool.submitTask(sum1,10,20)
// 2.我们自己创造了一个Result以及相关的类型，代码挺多
//packaged_task(function函数对象) 
//使用future代替result节省线程池代码
int main()
{
    ThreadPool pool;
    pool.start(2);
    future <int> r1=pool.subMitTask(sum1, 1, 2);
    future <int> r2 = pool.subMitTask(sum1, 1, 2);
    future <int> r3 = pool.subMitTask(sum1, 1, 2);
    future <int> r4 = pool.subMitTask(sum1, 1, 2);
    future <int> r5 = pool.subMitTask(sum1, 1, 2);

    cout << r1.get() << endl;
    cout << r2.get() << endl;
    cout << r3.get() << endl;
    cout << r4.get() << endl;
    cout << r5.get() << endl;
   // packaged_task<int(int, int)>task(sum1);
   // future<int> res = task.get_future();
   // //task(10, 20);
  
   // thread t1(std::move(task), 10, 20);//左值被禁用了
   // t1.detach();
   // cout << res.get() << endl;

   // //t1.join();
   //// t2.join();

   // std::cout << "Hello World!\n";
}

